/**
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * $Id$ CarritoBean.java
 * Universidad de los Andes (Bogotá - Colombia)
 * Departamento de Ingeniería de Sistemas y Computación
 * Licenciado bajo el esquema Academic Free License version 2.1
 *
 * Ejercicio: Muebles los Alpes
 * Autor: German Sotelo
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */
package com.losalpes.catalogo.beans;

import com.losalpes.catalogo.entities.ItemCarrito;
import com.losalpes.catalogo.entities.Usuario;
import com.losalpes.catalogo.servicios.ICarritoServicesLocal;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;

/**
 * Clase encarga de facilitar la administración del carrito de compras de un cliente.
 * @author German Sotelo
 */
public class CarritoBean {

    /**
     * Id del producto seleccionado para agregar al carrito
     */
    private Long id;

    /**
     * Cantidad del producto seleccionado para agregar al carrito
     */
    private int cantidad;

    /**
     * Mensaje con información importante para mostrar al cliente.
     */
    private String mensaje;

    /**
     * Relación con la interfaz que provee los servicios necesarios para administrar el carrito.
     */
    @EJB
    private ICarritoServicesLocal carritoServices;

    /**
     * Constructor por defecto del backing bean carrito.
     */
    public CarritoBean() {
    }

    /**
     * Retorna la cantidad del producto seleccionado
     * @return
     */
    public int getCantidad() {
        return cantidad;
    }

    /**
     * Asugna la cantidad del producto seleccionado para agregar al carrito.
     * @param cantidad
     */
    public void setCantidad(int cantidad) {
        this.cantidad = cantidad;
    }

    /**
     * Retorna el id del producto seleccionado para agregar al carrito.
     * @return
     */
    public Long getId() {
        return id;
    }

    /**
     * Asigna el id del producto seleccionado para agregar al carrito
     * @param id
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * Agrega al carrito el producto seleccionado.
     * @return
     */
    public String agregarAlCarrito(){
        carritoServices.agregarAlCarrito(id, cantidad);
        return "carrito";
    }

    /**
     * Retorna los items que actualmente estàn en el carrito.
     * @return
     */
    public List<ItemCarrito> getItemsCarrito() {
        return carritoServices.getItemsCarrito();
    }

    /**
     * Borra del carrito el producto seleccionado.
     */
    public void delete(){
        carritoServices.remove(id);
    }

    /**
     * Raliza la compra del carrito.
     * @return
     */
    public String pagarCarrito(){
        if(FacesContext.getCurrentInstance().getExternalContext().getSessionMap().containsKey("SecurityBean")){
            SecurityBean sessionSecurity = (SecurityBean)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("SecurityBean");
            Usuario user = sessionSecurity.getUser();
            if(user!=null){
                carritoServices.pagarCarrito(user);
                mensaje="Compra exitosa. En pocos dias recibirá su pedido en su residencia. Gracias por su compra.";
                return "Aceptado";
            }
            destroyBean();
        }
        mensaje="Un error surgió durante la compra y esta no ha sido realizada";
        return "Error";
    }

    /**
     * Retorna el mensaje con informacion para mostrar al cliente.
     * @return
     */
    public String getMensaje() {
        return mensaje;
    }


    /**
     * Remueve el presente bean de la sesión en curso
     */
    public void destroyBean() {
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("CarritoBean");
    }
    
}

